package com.ruoyi.agent.mapper;

import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.agent.domain.SysAgent;
import com.ruoyi.agent.domain.SysAgentListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * 管理Mapper接口
 *
 * @author ruoyi
 * @date 2024-06-12
 */
@Mapper
public interface SysAgentMapper
{
    /**
     * 查询管理
     *
     * @param id 管理主键
     * @return 管理
     */
    public SysAgent selectSysAgentById(Long id);

    /**
     * 查询管理列表
     *
     * @param sysAgent 管理
     * @return 管理集合
     */
    public List<SysAgent> selectSysAgentList(SysAgent sysAgent);

    /**
     * 新增管理
     *
     * @param sysAgent 管理
     * @return 结果
     */
    public int insertSysAgent(SysAgent sysAgent);

    /**
     * 修改管理
     *
     * @param sysAgent 管理
     * @return 结果
     */
    public int updateSysAgent(SysAgent sysAgent);

    /**
     * 删除管理
     *
     * @param id 管理主键
     * @return 结果
     */
    public int deleteSysAgentById(Long id);

    /**
     * 批量删除管理
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysAgentByIds(Long[] ids);

    @Select("select * from sys_agent where dept_id = #{deptId}")
    List<SysAgent> selectSysAgentByDeptId(Long deptId);

    @Update("update sys_agent set store_num = #{num} where id = #{id}")
    void addStoreNumById(@Param("num") Long num, @Param("id") Long id);

    @Update("update sys_agent set store_num = #{storeNum} where id = #{id}")
    void updateSysAgentStoreNum(@Param("storeNum") Long storeNum, @Param("id") Long id);

    @Select("select store_num from sys_agent where id = #{id}")
    Long selectSysAgentStoreNumById(Long id);

    List<SysAgent> selectSysAgentByIds(@Param("agentIds") List<Long> agentIds);


    @Update("update sys_agent set balance = TRUNCATE((balance-#{allAmount}),2) where (balance - #{allAmount}) > 0 and id = #{agentId}")
    int updateBalance(@Param("agentId") Long agentId,@Param("allAmount") BigDecimal allAmount);

    @Select("select id,name from sys_agent ")
    List<SysAgentListVO> selectAllSysAgentIdAndName();

    @Update("update sys_agent set balance = TRUNCATE((balance+#{balance}),2) where id = #{id}")
    int updateSysAgentBalance(SysAgent agentToUpdate);


    @Update("update sys_agent set status = #{status} where id = #{agentId}")
    int updateSysAgentStatus(@Param("agentId") Long agentId, @Param("status")String status);

    @Select("select address from sys_store_address where status = 0")
    String getStoreAddress();


    @Select("select count(1) from sys_agent where mark = #{mark}")
    int selectSysAgentByMark(String mark);
}
